package com.runfast.common.utils;

import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;

import java.io.IOException;
import java.io.InputStream;

/**
 * @author: lijin
 * @date: 2018年07月03日
 */
public class UploadUtil {

    //设置好账号的ACCESS_KEY和SECRET_KEY
    private static String ACCESS_KEY = "Bku4MNJHn2m-qHPxZ4jDTkkV-tIw6U-u6Ex2mUrW";
    private static String SECRET_KEY = "eMSL04-fhF-IggfUsa_v87IcX_ehREMA0gVj3iCL";
    //要上传的空间
    private static String bucketname = "runfast";
    //上传到七牛后保存的文件名
//    private static String key = "my-java.png";
    //上传文件的路径
//    String FilePath = "/.../...";

    //密钥配置
    private static Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);

    ///////////////////////指定上传的Zone的信息//////////////////
    //第一种方式: 指定具体的要上传的zone
    //注：该具体指定的方式和以下自动识别的方式选择其一即可
    //要上传的空间(bucket)的存储区域为华东时
    // Zone z = Zone.zone0();
    //要上传的空间(bucket)的存储区域为华北时
    // Zone z = Zone.zone1();
    //要上传的空间(bucket)的存储区域为华南时
    // Zone z = Zone.zone2();

    //第二种方式: 自动识别要上传的空间(bucket)的存储区域是华东、华北、华南。
    private static Zone z = Zone.autoZone();
    private static Configuration c = new Configuration(z);

    //创建上传对象
    private static UploadManager uploadManager = new UploadManager(c);

    public static void main(String args[]) throws IOException {
//        new UploadUtil().upload("","");
    }

    //简单上传，使用默认策略，只需要设置上传的空间名就可以了
    private static String getUpToken() {
        return auth.uploadToken(bucketname);
    }

    public static String upload(InputStream in, String filePath) throws IOException {
        try {
            //调用put方法上传
            Response res = uploadManager.put(in,filePath,getUpToken(),null, null);
            //打印返回的信息
            System.out.println(res.bodyString());

            if(res.isOK()){
                DefaultPutRet putRet = res.jsonToObject(DefaultPutRet.class);
                return putRet.key;
            }else{
                return null;
            }
        } catch (QiniuException e) {
            Response r = e.response;
            // 请求失败时打印的异常的信息
            System.out.println(r.toString());
            try {
                //响应的文本信息
                System.out.println(r.bodyString());
            } catch (QiniuException e1) {
                //ignore
            }
        }
        return null;
    }


}

